package logic.operation;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Observer;

import javax.swing.JProgressBar;

import logic.file.IFile;

/**
 * Klasa dostarcza interfejs dla operacji plikowych ogólnym charakterze, 
 * interfejs wymaga znaczącego rozszerzenia w przypadku operacji transferu 
 * Zadaniem klasy jest obsluga listy plików operacji oraz listy obserwatorów
 * @author Marcin
 *
 */
public abstract class AbstractFileOperation implements IFileOperation {
	
	List<IFile> files;
	
	//obserwatorzy
	//TODO obsluga jakichkolwiek obesrwatorów implementujących stosowny interfejs
	//ORAZ JProgressBara, bez redefiniowanie JProgressBara
	List<JProgressBar> observers = new ArrayList<JProgressBar>();
	
	//klasa abstrakcyjna może mieć, oczywiście, konstruktor
	//jednak może być on wywołany tylko w konstruktorach obiektów dziedziczących po tej klasie
	/**
	 * Konstruuje obiekt z jednem obserwującym progressBarem, 
	 * możliwe dodanie kolejnych przez stosowna metoda 
	 * @param files
	 * @param jProgressBar
	 */
	public AbstractFileOperation(List<IFile> files, JProgressBar jProgressBar) {
		this.files = files;
		//r(jProgressBar);
	}
	//ponizsze ostatecznie powinnny dzialac na obiektach Observer
	//zastosowac Adapter by przystosowac JProgressBar do interfejsu Observer
	//@Override
	public void notifyObservers() {
		//TODO
	}
	
	//@Override
	public void registerObserver(JProgressBar jpb) {
		observers.add(jpb);
		//TODO
	}
	
	//@Override 
	public void unregisterObserver(JProgressBar jpb) {
		//TODO
	}

}
